package xmlaufgabe2;

import java.awt.Color;
import java.awt.Font;
import java.util.ArrayList;
import java.util.Random;

/**
 * Klasse zur Haltung der Daten, sowie Implementation der Logik zur Erstellung
 * der Schriftarten, -stile und -groessen, sowie der Farben.
 *
 * @author Adrian Cieluch
 * @version 1.0, 10/27/11
 */
public class AphorismStringGenerator {
    /**
     * Speichert Aphorismen
     */
    private ArrayList<String> aphorisms;
    /**
     * Speichert Farben
     */
    private ArrayList<Color> colors;
    /**
     * Speichert Namen der Farben
     */
    private ArrayList<String> colorList;
    /**
     * Speichert Schriftarten
     */
    private ArrayList<String> fonts;
    
    /**
     * Speichert aktuelle Schriftart
     */
    private String currentFont;
    /**
     * Speichert aktuellen Schriftstil
     */
    private int currentFontStyle;
    /**
     * Speichert aktuelle Schriftgroesse
     */
    private int currentFontSize;
    
    /**
     * Initialisiert alle ArrayListen und Attribute und traegt Daten ein
     */
    public AphorismStringGenerator() {
        //Initialisierungen
        aphorisms = new ArrayList<String>();
        colors = new ArrayList<Color>();
        colorList = new ArrayList<String>();
        fonts = new ArrayList<String>();
        currentFont = "Verdana";
        currentFontStyle = Font.PLAIN;
        currentFontSize = 12;

        aphorisms.add("In jedem Geniestreich erkennen wir Gedanken, die wir selbst verworfen haben."
                + System.getProperty("line.separator")
                + "Ralph Waldo Emerson");
        aphorisms.add("Sitzt du zwischen zwei Stühlen, reichst du nicht zum Tisch hinauf."
                + System.getProperty("line.separator")
                + "Manfred Hinrich");
        aphorisms.add("Mancher macht gar nichts –"
                + System.getProperty("line.separator")
                + "außer Karriere."
                + System.getProperty("line.separator")
                + "Kuno Klaboschke");
        aphorisms.add("Glauben muß jeder, an Ihn oder dran."
                + System.getProperty("line.separator")
                + "Arthur Feldmann");
        aphorisms.add("Ein edler Charakter wird nicht leicht über sein eigenes Schicksal klagen."
                + System.getProperty("line.separator")
                + "Arthur Schopenhauer");
        aphorisms.add("Hektiker kennen nur die Stoppuhr."
                + System.getProperty("line.separator")
                + "Manfred Hinrich");
        aphorisms.add("Was wissen wir, wozu uns die Umstände treiben könnten!"
                + System.getProperty("line.separator")
                + "Friedrich Wilhelm Nietzsche");
        aphorisms.add("Selbstmord braucht keinen Anlaß, er braucht Reife."
                + System.getProperty("line.separator")
                + "Peter Rudl");
        
        colors.add(Color.red);
        colors.add(Color.blue);
        colors.add(Color.white);
        colors.add(Color.black);
        colors.add(Color.cyan);
        colors.add(Color.gray);
        colors.add(Color.magenta);
        colors.add(Color.green);
        
        colorList.add("red");
        colorList.add("blue");
        colorList.add("white");
        colorList.add("black");
        colorList.add("cyan");
        colorList.add("gray");
        colorList.add("magenta");
        colorList.add("green");
        
        fonts.add("Purisa");
        fonts.add("Monospaced");
        fonts.add("Garuda");
        fonts.add("Free Sans");
        fonts.add("Free Serif");

    }
    
    /**
     * Gibt Aphorismus an Index i als String-Objekt zurueck
     * 
     * @param i Index fuer die Aphorismenliste
     * @return Gefundener Aphorismus
     */
    public String getAphorismByIndex(int i) {
        return aphorisms.get(i);
    }
    
    /**
     * Durchsucht die Farbliste an Hand eines Namens und gibt die gefundene Farbe als Color-Objekt zurueck
     * 
     * @param s Name der Farbe
     * @return Gefundene Farbe
     */
    public Color getColorByName(String s) {
        Color c = Color.white;
        
        for(int i = 0; i < colorList.size(); i++) {
            if(colorList.get(i).equals(s))
                c = colors.get(i);
        }
        
        return c;
    }
    
    /**
     * Gibt die Farbe an Index i zurueck
     * 
     * @param i Index fuer die Farbliste
     * @return Gefundene Farbe
     */
    public Color getColorByIndex(int i) {
        return colors.get(i);
    }
    
    /**
     * Gibt den Farbnamen an Index i zurueck
     * 
     * @param index Index fuer die Farbnamenliste
     * @return Gefundener Farbname
     */
    public String getColorNameByIndex(int index) {
        return colorList.get(index);
    }
    
    /**
     * Gibt die Schriftart an Index i zurueck
     * 
     * @param i Index fuer die Schriftartenliste
     * @return Gefundene Schriftart
     */
    public String getFontByIndex(int i) {
        return fonts.get(i);
    }
    
    /**
     * Gibt ein Font-Objekt bestehend aus den aktuell gespeicherten Werten zurueck
     * 
     * @return Aktuelle Schrift
     */
    public Font getFont() {
        return new Font(currentFont, currentFontStyle, currentFontSize);
    }
    
    /**
     * Gibt aktuelle Schriftgroesse zurueck
     * 
     * @return Aktuelle Schriftgroesse
     */
    public int getFontSize() {
        return currentFontSize;
    }
    
    /**
     * Gibt aktuelle Schriftart zurueck
     * 
     * @return  Aktuelle Schriftart
     */
    public String getFontName() {
        return currentFont;
    }
    
    /**
     * Waehlt eine zufaellige Schriftart und gibt diese als Schrift zurueck
     * 
     * @return Zufaellige Schriftart
     */
    public Font changeRandomFont() {
        Random r = new Random();
        currentFont = fonts.get(r.nextInt(fonts.size()));
        return new Font(currentFont, currentFontStyle, currentFontSize);
    }
    
    /**
     * Waehlt eine Schriftart mit Index i und gibt diese als neue Schrift zurueck
     * 
     * @param i Index fuer die Schriftartenliste
     * @return Schrift mit neuer Schriftart
     */
    public Font changeFont(int i) {
        currentFont = fonts.get(i);
        return new Font(currentFont, currentFontStyle, currentFontSize);
    }
    
    /**
     * Waehlt einen Schriftstil mit Index i und gibt diesen als neue Schrift zurueck
     * 
     * @param i Index fuer die Schriftstilliste
     * @return Schrift mit neuem Schriftstil
     */
    public Font changeFontStyle(int i) {
        currentFontStyle = i;
        return new Font(currentFont, currentFontStyle, currentFontSize);
    }
    
    /**
     * Waehlt eine Schriftgroesse mit Index i und gibt diese als neue Schrift zurueck
     * 
     * @param i Index fuer die Schriftgroessenliste
     * @return Schrift mit neuer Schriftgroesse
     */
    public Font changeFontSize(int i) {
        currentFontSize = i;
        return new Font(currentFont, currentFontStyle, currentFontSize);
    }
    
    /**
     * Gibt die Laenge der Aphorismenliste zurueck
     * 
     * @return Laenge der Aphorismenliste
     */
    public int getAphorismListSize() {
        return aphorisms.size();
    }
    
    /**
     * Gibt die Laenge der Schriftartenliste zurueck
     * 
     * @return Laenge der Schriftartenliste
     */
    public int getFontListSize() {
        return fonts.size();
    }
    
    /**
     * Gibt die Laenge der Farbenliste zurueck
     * 
     * @return  Laenge der Farbenliste
     */
    public int getColorListSize() {
        return colorList.size();
    }
    
    
}
